#include <iostream>
#include <string>
using std::cout;
using std::endl;
using std::string;
using std::ostream;
//输出流运算符的重载
void test(){
    string str = "hello,world";
    cout << str << endl;
}
class Complex{
public:
    Complex(int real, int image)
    :_real(real)
    ,_image(image)
    {
        cout << "Complex(int,int)" << endl;
    }

    //输出流运算符使用成员函数的形式进行编写
    //输出流运算符函数的返回值是什么？？？
    //参数列表？？？
    //成员函数，第一个参数this指针
    //operator<<(Complex * const this, ostream & os);
    ostream & operator<<(ostream & os){
        os << _real << "+" << _image << "i";
        return os;
    }


private:
    int _real;
    int _image;
};
//如果编写在Complex的成员函数中，那么只能够使用下面的方式来进行处理
void test2(){
    Complex c1(1, 2);
    //此时需要对于输出流运算符进行重载
    //使用成员函数还是友元函数呢？？？？？？友元
    //如果按照这个理论，那么输入流运算符应该使用成员函数形式
    cout << c1 << endl;
    //c1.operator<<(&c1, cout);
    c1 << cout ;
}
void test3(){
    int a = 10;
    //下面这两行代码是等价的
    cout.operator<<(a).operator<<(endl);
    cout << a << endl;
}

int main()
{
    test();
    return 0;
}

